package com.jpress.ejb;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.jpress.model.Usuario;
import com.jpress.remote.UsuarioRemote;

@Stateless(mappedName="bean/usuario")
public class UsuarioEJB implements UsuarioRemote{

	@PersistenceContext(unitName="jpressEE")
	private EntityManager entityManager;
	
	@Override
	public void inserir(Usuario usuario) throws Exception{
		try {
			entityManager.persist(usuario);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void atualizar(Usuario usuario) throws Exception {
		try {
			entityManager.merge(usuario);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void excluir(Usuario usuario) throws Exception {
		try {
			usuario = entityManager.merge(usuario);
			entityManager.remove(usuario);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public Usuario findByEmail(String email){
		Query query = entityManager.createNamedQuery("Usuario.findByEmail");
		query.setParameter("email", email);
		@SuppressWarnings("unchecked")
		List<Usuario> resultado = (List<Usuario>) query.getResultList();
		if(resultado.size() == 1)
			return resultado.get(0);
		return null;
	}
	

	@Override
	public Usuario findByEmailAndSenha(String email, String senha) {
		Query query = entityManager.createNamedQuery("Usuario.findByEmailAndSenha");
		query.setParameter("email", email);
		query.setParameter("senha", senha);
		@SuppressWarnings("unchecked")
		List<Usuario> resultado = (List<Usuario>) query.getResultList();
		if(resultado.size() == 1)
			return resultado.get(0);
		return null;
	}

	@Override
	public List<Usuario> pesquisar(String nome, String email, String local) {
		Query query = entityManager.createNamedQuery("Usuario.pesquisar");
		query.setParameter("nome", "%" + nome + "%");
		query.setParameter("email", "%" + email + "%");
		query.setParameter("local", "%" + local + "%");
		@SuppressWarnings("unchecked")
		List<Usuario> resultado = (List<Usuario>) query.getResultList();
		return resultado;
	}

	@Override
	public long getQuantidadeUsuarios() {
		Query query = entityManager.createNamedQuery("Usuario.countUsuarios");
		return (long) query.getSingleResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> getUltimosUsuariosCadastrados(int quantidade) {
		Query query = entityManager.createNamedQuery("Usuario.ultimosCadastrados");
		query.setMaxResults(quantidade);
		return (List<Usuario>) query.getResultList();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> findByDataAniversario(Integer dia, Integer mes) {
		Query query = entityManager.createNamedQuery("Usuario.findByDataAniversario");
		query.setParameter("dia", dia);
		query.setParameter("mes", mes);
		return (List<Usuario>) query.getResultList();
	}
	
}
